"""
1、位置参数
定义：调用函数时根据函数定义的位置参数来传递参数
注意：传递的参数和定义的参数的顺序及个数必须一致


def user_info(name,age,gender):
    print(f"你的名字{name},年龄是{age}，性别是{gender}")


user_info("TOM",20,"男")


2、关键字参数
定义：调用函数时通过 键=值 的形式传递参数
作用：可以让函数更加清晰、容易使用，同时也清除了参数的顺序需求
注意：函数调用时，如果有位置参数时，位置参数必须在关键字参数的前面，但关键字参数之间不存在先后顺序

def user_info(name,age,gender)
# 关键字传参
user_info(name = "小明",age = 20, gender = "男")

# 可以不按照固定顺序
user_info( gender = "男",name = "小明",age = 20)

# 可以和位置参数混用，位置参数必须在关键字参数的前面，但关键字参数之间不存在先后顺序

ser_info( "小明",gender = "男",age = 20,)

3、缺省参数
定义：缺省参数也叫默认参数，用于定义函数，为参数提供默认值，调用函数时可不传该默认参数的值（注意：所有位置参数必须出现在默认参数前，包括函数定义和调用）
作用：当函数调用时没有传递参数，就会使用默认是缺省参数对应的值。如果传递参数了，就使用传递的参数值

def user_info(name,age,gender = "男"):
    print(f"你的姓名是{name},年龄是{age},性别是{gender}")


user_info("TOM",20)
user_info("ROSE",21,"女")


4、不定长参数
定义：不定长参数也叫可变参数，用于不确定调用的时候会传多少个参数（不传参也可以），直接在定义参数的时候写参数地方前面加"*"号（位置参数）或者"**"号
（关键字参数）
作用：当调用函数时不确定参数个数时，可以使用不定长参数

不定长参数类型：位置传递和关键字传递
位置参数：
直接在定义参数的时候写参数地方前面加"*"号
传进的所有参数都会被args变量收集，它会根据传进参数的位置合并为一个元组，args是元组类型

def user_info(*args):
    print(args)


user_info("TOM")
user_info("TOM",18)


关键字参数：
直接在定义参数的时候写参数地方前面加"**"号
传进的所有参数都会被kwargs变量收集，所有的键 = 值会被kwargs接受，同时会根据 "键=值"组成字典

def user_info(**kwargs):
    print(kwargs)


user_info(name = "TOM")
user_info(name = "TOM"，age = 18)







"""
def test_return():
    return 1,2,3


x,y,z = test_return()
print(x)
print(y)
print(z)